
/**
 * 功能：判断 路由对象 是否在用户的权限列表中(用户是否有权限访问该路由)
 * @params {*} route  路由对象 {}
 * @params {*} roles 用户的权限列表 [1,2,3,4,5]
 */

function hasPermission(route, roles) {
    //满足这个条件，说明该路由route需要权限  才能访问
    if (route && route.meta && route.meta.permission_no) {
        return roles.some((item) => { return item == route.meta.permission_no })
    } else {//不满足条件   说明该路由route无需权限就能访问
        return true;
    }
    //true  有权限   false   无权限
}


/**
 * 功能：从系统的完整路由表中，过滤出用户有权限访问的路由
 * @routes {*} routes 系统的完整路由表 ,[{},{},{}]
 * @roles {*} roles 用户的权限列表, [1,2,3,4,5]
 */

function filterRoutes(routes, roles) {
    let accessedRoutes = routes.filter((route) => {
        if (hasPermission(route, roles)) {//有访问该路由的权限
            if (route.children && route.children.length > 0) {//该路由柚子路由，需要继续判断该用户是否有子路由的访问权限
                route.children = filterRoutes(route.children, roles);
            }

            return true;
        } else {//没有访问该路由的权限
            return false;
        }
    })
    return accessedRoutes;
}

export default filterRoutes;